# -*- coding: utf-8 -*-

import json
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
import os

import pymongo


class CollegePipeline(object):
    def __init__(self):
        client = pymongo.MongoClient()
        db = client['gaokao']
        self.collection = db.college

    def process_item(self, item, spider):
        print(item)
        text = dict(item)
        self.collection.insert(text)

        return item


class ProvincePipeline(object):
    def __init__(self):
        client = pymongo.MongoClient()
        db = client['gaokao']
        self.collection = db.province

    def process_item(self, item, spider):
        print(item)
        text = dict(item)
        self.collection.insert(text)

        return item


class MajorPipeline(object):
    def __init__(self):
        client = pymongo.MongoClient()
        db = client['gaokao']
        self.collection = db.major

    def process_item(self, item, spider):
        print(item)
        text = dict(item)
        self.collection.insert(text)

        return item


class TimePipeline(object):
    def __init__(self):
        client = pymongo.MongoClient()
        db = client['gaokao']
        self.collection = db.time

    def process_item(self, item, spider):
        print(item)
        text = dict(item)
        self.collection.insert(text)

        return item


class GaokaoPipeline(object):
    # 构造方法（初始化对象时执行的方法）
    def __init__(self):
        # 必须使用 w+ 模式打开文件，以便后续进行 读写操作（w+模式，意味既可读，亦可写）
        self.json_file = ''
        # self.json_file = codecs.open('province.json', 'w+', encoding='UTF-8')  # 各个省份分数线数据文件
        # self.json_file = codecs.open('college.json', 'w+', encoding = 'UTF-8') # 院校录取分数线
        # self.json_file = codecs.open('time.json', 'w+', encoding = 'UTF-8') # 高考时间
        # self.json_file = codecs.open('major.json', 'w+', encoding='UTF-8')  # 专业查询

    # 爬虫开始时执行的方法
    def open_spider(self, spider):
        # 在爬虫开始时，首先写入一个 '[' 符号，构造一个 json 数组
        # 为使得 Json 文件具有更高的易读性，我们辅助输出了 '\n'（换行符）
        self.json_file.write('gaokao([\n')

    # 爬虫 pipeline 接收到 Scrapy 引擎发来的 item 数据时，执行的方法
    def process_item(self, item, spider):
        # 将 item 转换为 字典类型，并编码为 json 字符串，写入文件
        # 为使得 Json 文件具有更高的易读性，我们辅助输出了 '\t'（制表符） 与 '\n'（换行符）
        item_json = json.dumps(dict(item), ensure_ascii=False)
        self.json_file.write('\t' + item_json + ',\n')
        return item

    # 爬虫结束时执行的方法
    def close_spider(self, spider):
        # 在结束后，需要对 process_item 最后一次执行输出的 “逗号” 去除
        # 当前文件指针处于文件尾，我们需要首先使用 SEEK 方法，定位文件尾前的两个字符（一个','(逗号), 一个'\n'(换行符)）的位置
        self.json_file.seek(-2, os.SEEK_END)
        # 使用 truncate() 方法，将后面的数据清空
        self.json_file.truncate()
        # 重新输出'\n'，并输入']'，与 open_spider(self, spider) 时输出的 '['，构成一个完整的数组格式
        self.json_file.write('\n])')
        # 关闭文件
        self.json_file.close()
